/* eslint-disable no-undef */
/* eslint-disable no-unused-vars */
class Watcher {
  /**
   * @param {*} vm vue实例
   * @param {*} key data中的属性名
   * @param {*} cb 回调函数
   */
  constructor (vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 把watcher对象记录到 Dep 的静态属性中
    Dep.target = this

    // 触发getter，在getter中会调用addSub
    this.oldValue = vm[key]

    Dep.target = null
  }

  // 当数据发生变化时，更新视图
  update () {
    const newValue = this.vm[this.key]

    if (newValue === this.oldValue) {
      return
    }

    this.cb(newValue)
  }
}
